use actix_web::{get, web::Path, App, HttpServer, Responder};
use tmq::{request, Context, Message};


#[get("/query/{id}")]
async fn query(Path(id): Path<u32>) -> impl Responder {
    // todo! 根据需要是否查询缓存, 暂省略。。。

    // 建立Zmq套接字
    let send_sock = request(&Context::new())
        .connect("tcp://127.0.0.1:10000")
        .unwrap();

    // 构造消息体
    let message: Message = format!("query {id}").as_bytes().into();

    // 发送消息(向Application查询数据)
    let recv_sock = send_sock.send(message.into()).await.unwrap();

    // 接收Server端消息
    let (msg, _) = recv_sock.recv().await.unwrap();

    // 向调用者 回传数据
    msg.iter()
        .map(|item| item.as_str().unwrap())
        .collect::<String>()
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(move || App::new().service(query))
        .bind("127.0.0.1:8080")?
        .run()
        .await
}
